// src/main/java/com/example/springboot3/template/VelocityRenderer.java
package com.example.springboot3.config;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;

import java.io.StringWriter;
import java.util.Map;

/**
 * 使用 Apache Velocity 模板引擎进行渲染的工具类。
 * 仿照 FreeMarker 的 TemplateRenderer 设计。
 */
public class VelocityRenderer {

    private static final VelocityEngine ENGINE;

    static {
        ENGINE = new VelocityEngine();
        ENGINE.setProperty("resource.loader", "class");
        ENGINE.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
        ENGINE.setProperty("input.encoding", "UTF-8");
        ENGINE.setProperty("output.encoding", "UTF-8");
        ENGINE.init();
    }

    /**
     * 根据模板名称和数据模型进行渲染。
     *
     * @param templateName 模板文件名（相对于 /templates/ 目录，如 "summary_template"）
     * @param dataModel    数据模型
     * @return 渲染后的字符串
     */
    public static String render(String templateName, Map<String, Object> dataModel) {
        try {
            Template template = ENGINE.getTemplate("/templates/" + templateName + ".vm");
            VelocityContext context = new VelocityContext(dataModel);
            StringWriter writer = new StringWriter();
            template.merge(context, writer);
            return writer.toString().trim();

        } catch (Exception e) {
            System.err.println("❌ 渲染模板失败: " + templateName + ".vm - " + e.getMessage());
            e.printStackTrace();
            return "<p style='color:red;'>[模板渲染错误: " + templateName + "]</p>";
        }
    }
}